
import Dexie from 'dexie';

// 1. 初始化数据库实例
const db = new Dexie('vue3DynamicKeyDB');

// 2. 定义表结构：主键为 `key`（通用字段，存储时动态传入键名）
// 版本号根据实际情况递增（如设为4）
db.version(1).stores({
    dynamicData: 'key' // `key` 作为主键，值由存储时传递
});

// 3. 扩展表操作：键名完全由外部传递
db.dynamicData = {
    ...db.dynamicData,
    // 存储数据（键名由参数 `key` 动态传入）
    async save(key, data, desc = '默认数据') {
        // 直接用传入的 `key` 作为主键值，不存在则新增，存在则更新
        return await db.dynamicData.put({
            key: key,       // 主键值：存储时传递的键名（如 'IDC10'、'IDC9' 或其他）
            data: data,     // 核心数据
            storeTime: Date.now(), // 存储时间
            desc: desc      // 描述
        });
    },
    // 读取数据（通过存储时传递的键名 `key` 查询）
    async get(key) {
        // 直接用传入的 `key` 作为主键查询
        return await db.dynamicData.get(key);
    },
    // 删除指定键名的数据
    async remove(key) {
        return await db.dynamicData.delete(key);
    },
    // 获取所有存储的键名列表
    async getAllKeys() {
        // 只查询主键 `key` 的值，返回所有已存储的键名
        return await db.dynamicData.orderBy('key').keys();
    }
};


// 1. 存储数据（键名由 currentKey 动态传递）
export const saveData = async (key,data) => {
    if (!key) {
        return '请输入键名';
    }
    try {
        await db.dynamicData.save(key, data, '动态键名存储的数据');
        console.log(`键名 [${key}] 存储成功`)
        return `键名 [${key}] 存储成功`;
    }catch (e) {
        console.log(`存储失败：${e.message}`)
    }
};
// 2. 读取数据（通过当前键名查询）
export const readData = async (key) => {
     if (!key) {
        return '请输入键名';
     }
    try {
        const data = await db.dynamicData.get(key);
        if (data) {
            console.log("读取数据",data)
        } else {
            return`键名 [${key}] 不存在`;
        }
    } catch (err) {
        return `读取失败：${err.message}`;
    }
};
// 3. 删除指定键名的数据
export const deleteData = async (key) => {
    if (!key) {
        return '请输入键名';
    }
    try {
        await db.dynamicData.remove(key);
        return `键名 [${key}] 已删除`;
    } catch (err) {
        dataInfo.value = `删除失败：${err.message}`;
    }
};
// 4. 获取所有已存储的键名
export const getAllStoredKeys = async () => {
    try {
        const keys = await db.dynamicData.getAllKeys();
        console.log(keys);
        return keys;
    } catch (err) {
        return `获取键名失败：${err.message}`;
    }
};

export default db;
